/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.dwh.pretups.conf;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.dwh.pretups.log.Logger;

/**
 *
 * @author Jose Carlos Palma
 * @version v1.0
 */
public class Configuration {

    private static Configuration instance;
    private File file = null;

    /**
     * 
     * @param fileName
     */
    private Configuration(String fileName) {
        this.file = new File(fileName);
    }

    /**
     * 
     */
    private void load() {
        try {
            System.getProperties().load(new FileInputStream(instance.file));
            System.getProperties().list(System.out);
        } catch (FileNotFoundException ex) {
            if (Logger.main == null) {
                Logger.main.println("No se pudo cargar el archivo de configuracion, " + ex.getMessage(), "ERROR");
            } else {
                System.out.println("ERROR: No se pudo cargar el archivo de configuracion, " + ex.getMessage());
            }
            System.exit(1);
        } catch (IOException ex) {
            if (Logger.main == null) {
                Logger.main.println("No se pudo cargar el archivo de configuracion, " + ex.getMessage(), "ERROR");
            } else {
                System.out.println("ERROR: No se pudo cargar el archivo de configuracion, " + ex.getMessage());
            }
            System.exit(1);
        }
    }

    /**
     *
     */
    public static void reload() {
        if (instance != null) {
            try {
                System.getProperties().load(new FileInputStream(instance.file));
                System.getProperties().list(System.out);
            } catch (FileNotFoundException ex) {
                if (Logger.main == null) {
                    Logger.main.println("No se pudo cargar el archivo de configuracion, " + ex.getMessage(), "ERROR");
                } else {
                    System.out.println("ERROR: No se pudo cargar el archivo de configuracion, " + ex.getMessage());
                }

            } catch (IOException ex) {
                if (Logger.main == null) {
                    Logger.main.println("No se pudo cargar el archivo de configuracion, " + ex.getMessage(), "ERROR");
                } else {
                    System.out.println("ERROR: No se pudo cargar el archivo de configuracion, " + ex.getMessage());
                }

            }
        }
    }

    /**
     * 
     * @param fileName
     */
    public static void createInstance(String fileName) {
        if (instance == null) {
            Configuration.instance = new Configuration(fileName);
        }
        Configuration.instance.load();
    }

    /**
     *
     * @param key
     * @return
     */
    public static String get(String key) {
        return System.getProperty(key).trim();
    }

    /**
     *
     * @param key
     * @param defaultVal
     * @return
     */
    public static String get(String key, String defaultVal) {
        return System.getProperty(key, defaultVal);
    }

    /**
     *
     * @param key
     * @return
     */
    public static int getInt(String key) {
        int retVal = 0;
        retVal = Integer.parseInt(get(key));
        return retVal;
    }

    /**
     *
     * @param key
     * @param defaultVal
     * @return
     */
    public static int getInt(String key, int defaultVal) {
        int retVal = defaultVal;


        retVal = Integer.parseInt(get(key));

        return retVal;
    }
}
